#ifndef PARSERCONSULTAS_H_
#define PARSERCONSULTAS_H_

#include <iostream>
#include <vector>
#include <map>
#include <fstream>

class ParserConsultas {
private:
	bool estado;
	std::string error;
	std::string archivoConsultas;
	std::vector<std::string> datosDeTablas;
	std::map<std::string, unsigned int> cantConsultasPorTabla;	//nombreTabla - cantconsultas
	std::map<std::string, std::vector<std::string> > mapFiltros;
	std::map<std::string, std::vector<std::string> > mapInputsDimensiones;
	std::map<std::string, std::vector<std::string> > mapInputsHechos;
	std::map<std::string, std::string> mapGraficos;

public:

	ParserConsultas(const char* archivoConsulta);
	void iniciarParseo();
	bool getEstado();
//	std::vector<std::string>& getVector() ;
	std::string getError();
	std::vector<std::string>& getDatosDeTablas();
	unsigned int getCantidadconsultasDeTabla(std::string & tabla);

	// nombreTabla + numeroConsulta
	std::vector<std::string>& getFiltros(std::string &datosDeTabla, unsigned int consulta);
	bool hayFiltro(std::string &datosDeTabla, unsigned int consulta);
	bool hayInputDimension(std::string &datosDeTabla, unsigned int consulta);
	bool hayInputHecho(std::string &datosDeTabla, unsigned int consulta);
	bool hayGrafico(std::string &datosDeTabla, unsigned int consulta);
	std::vector<std::string>& getInputsDimensiones(std::string &datosDeTabla, unsigned int consulta);
	std::vector<std::string>& getInputsHechos(std::string &datosDeTabla, unsigned int consulta);
	std::string getGrafico(std::string &datosDeTabla, unsigned int consulta);
	void mostrar();
	std::string getNombreTabla(std::string & datosDeTabla);
	unsigned int getNumeroTabla(std::string& datosDeTabla);
	std::vector<std::string> getColumnasGrafico(const std::string &linea);
private:
	std::string getPrimerToken(std::string &linea);
	std::string getSegundoToken(std::string &linea);
	std::string getDato(std::string valor, unsigned int numero);
};


#endif
